package org.gtesoreria

import java.text.DateFormat;
import java.text.SimpleDateFormat;

class Familiar {
    
    static final String TIPO_CONYUGE = "Conyuge"
    static final String TIPO_HIJO = "Hijo/a"
    static final String TIPO_FAMILIAR_A_CARGO= "Familiar a cargo"
	static final String TIPO_OTROS = "Otros"
	static final String TIPO_PADRE = "Padre/madre"
	static final String TIPO_NIETO = "Nieto/a"
	static final String TIPO_SOBRINO = "Sobrino/a"
	static final String TIPO_EN_GUARDA = "En Guarda"
	def static tipos = ["En Guarda", "Hijo/a", "Esposa/o", "Nieto/a", "Padre/madre", "Otros", "Sobrino/a","Conyuge", "Familiar a cargo"]
    String tipo
    String nombreApellido
    Date fechaNacimiento
	String dni
	String sexo
    int index
    static belongsTo = [afiliado:Afiliado]
    
    static transients = [ 'deleted' ]
    
    boolean deleted
    static mapping = {
        index column:"familiar_index"
    }
    static constraints = {
        afiliado(nullable:false)
		dni(nullable:true)
		fechaNacimiento(nullable:true)
		nombreApellido(nullable:false)
		sexo(nullable:true)
		tipo(inList:tipos, nullable:true)
    }
    
    
	
	def String returnEdad(){
		if(!fechaNacimiento)
			return "0"
		Calendar now = Calendar.getInstance();
		Calendar dob = Calendar.getInstance();
		dob.setTime(fechaNacimiento);
		if (dob.after(now)) {
		  throw new IllegalArgumentException("Can't be born in the future");
		}
		int year1 = now.get(Calendar.YEAR);
		int year2 = dob.get(Calendar.YEAR);
		int age = year1 - year2;
		int month1 = now.get(Calendar.MONTH);
		int month2 = dob.get(Calendar.MONTH);
		if (month2 > month1) {
		  age--;
		} else if (month1 == month2) {
		  int day1 = now.get(Calendar.DAY_OF_MONTH);
		  int day2 = dob.get(Calendar.DAY_OF_MONTH);
		  if (day2 > day1) {
			age--;
		  }
		}
		return age;
		
	}
	
	def List printableProperties(){
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
		def fecha = formatter.format(this.fechaNacimiento);
		return [this.nombreApellido, 
			fecha, 
			this.returnEdad(), 
			this.afiliado?.legajo + " - " + this.afiliado?.apellidoNombre, 
			this.afiliado?.lugarTrabajo?.nombre,
			this.afiliado?.delegado?.apellidoNombre ]
	} 
}
